import { Base } from "../core/Base";
import { ComponentManager } from "./ComponentManager";
import { EntityManager } from "./EntityManager";
import { PipeManager } from "./PipeManager";
import { SystemManager } from "./SystemManager";
/**
 * 注册类，注册所有的管理类
 * @author jiangjinwei
 * @memberof w
 */
class Register extends Base {
    static instance = null;
    constructor(opts = {}) {
        if (Register.instance) {
            return Register.instance;
        }
        super(opts);
        //注册16个组件管理类,分别管理16类组件。
        this._managers = [];
        for (let i = 0; i < 22; i++) {
            this.managers[i] = new ComponentManager({ type: i });
        }
        //注册一个实体管理类管理实体。
        this._entityManager=new EntityManager();
        //注册系统管理类
        this._systemManager=new SystemManager();
        //注册管线管理类
        this._pipeManager=new PipeManager();
        Register.instance=this;
    }
    /**
     * @property {Array<ComponentManager>} 注册的所有组件管理类
     */
    get managers() {
        return this._managers;
    }
    /**
     * 根据组件类型获取该类型的组件管理类。
     * @param {Number} type 组件类型正整数,目前支持到16。
     * @returns {ComponentManager} 范围type类型的管理类。
     */
    manager(type) {
        return this.managers[type];
    }
    /**
     * 获取实体管理类。
     * @property {EntityManager} 注册的实体管理类
     */
    get entityManager(){
        return this._entityManager;
    }
    /**
     * 获取系统管理类。
     * @property {SystemManager} 注册的系统管理类
     */
    get systemManager(){
        return this._systemManager;
    }
    /**
     * 获取管线管理类。
     * @property {PipeManager} 注册的管线管理类
     */
    get pipeManager(){
        return this._pipeManager;
    }
    destroy(){
        this.pipeManager.clear();
        this.entityManager.clear();
        for (let i = 0; i < 22; i++) {
            this.managers[i] .clear();
        }
        this._managers=null;;
        this._pipeManager=null;
        this._entityManager=null;
        Register.instance=null;
    }
}
export { Register }